<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数的方法</title>
    <script>
        /* 函数的方法 */
        /* 
        call()和apply()
        都是函数对象的方法，需要通过函数对象来调用
        当调用call和aplay都会调用函数
        区别：
            调用call和apply时可以将一个对象指定为第一个参数
            此时这个对象将会成为函数执行时的this
            call()方法可以将实参在对象之后依次传递
            apply()方法需要将实参封装到一个数组中统一传递

        this总结：
            1.函数形式调用时，this永远都是window
            2.方法形式调用时，this是调用方法的对象
            3.构造函数形式调用时，this时新创建的那个对象
            4.使用call和apply调用时，this是指定的那个对象
        */

        function fun(a, b) {
            console.log("我是fun函数");
            console.log(this);
            console.log(a, b);

        }

        var obj = {
            name: "obj",
            sayName: function() {
                console.log(this.name);
            }
        };
        var obj2 = {
            name: "obj2"
        }
        fun.call();
        fun.call(obj);
        fun.apply(obj2);
        //通过参数来指定this
        obj.sayName.apply(obj2);
        fun.call(obj, 2, 3);
    </script>
</head>

<body>

</body>

</html>